# -*- coding: utf-8 -*-

import abc

from ..component import Component


class Conveyor(Component):

    @abc.abstractmethod
    def send(self, data, before_send=None):
        raise NotImplementedError('call to abstract method %s.send' % (self.__class__,))

    @abc.abstractmethod
    def receive(self, after_receive=None, ack_auto=True):
        raise NotImplementedError('call to abstract method %s.receive' % (self.__class__,))

    @abc.abstractmethod
    def ack(self, data):
        raise NotImplementedError('call to abstract method %s.ack' % (self.__class__,))
